﻿#define  _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
using namespace std;

//int main(int argc, char* argv[])
//{
//
//	string a = "hello world";
//	string b = a;
//	if (a.c_str() == b.c_str())
//	{
//		cout << "true" << endl;
//	}
//	else cout << "false" << endl;
//	string c = b;
//	c = "";
//	if (a.c_str() == b.c_str())
//	{
//		cout << "true" << endl;
//	}
//	else cout << "false" << endl;
//	a = "";
//	if (a.c_str() == b.c_str())
//	{
//		cout << "true" << endl;
//	}
//	else cout << "false" << endl;
//	return 0;
//
//}

//int main()
//{
//	string str("Hello Bit.");
//	str.reserve(111);
//	str.resize(5);
//	str.reserve(50);
//	cout << str.size() << ":" << str.capacity() << endl;
//	return 0;
//}


void test_string8()
{
	string s1("hello world");
	cout << s1 << endl;

	s1.assign("11111");
	cout << s1 << endl;

	string s2("hello world");
	s2.insert(0, "xxxx");
	cout << s2 << endl;


	char ch = 'y';
	cin >> ch;
	s2.insert(0, 1, ch);
	cout << s2 << endl;

	s2.insert(s2.begin(), 'y');
	cout << s2 << endl;

	s2.insert(s2.begin(), s1.begin(), s1.end());
	cout << s2 << endl;
}

void test_string9()
{
	string s1("hello world");
	cout << s1 << endl;

	s1.erase(0, 1);
	cout << s1 << endl;

	//s1.erase(5);
	s1.erase(5,100);
	cout << s1 << endl;

	string s2("hello world");
	s2.replace(5, 1, "%20");
	cout << s2 << endl;

	string s3("hello world hello bit");
	for (size_t i = 0; i < s3.size(); )
	{
		if (s3[i] == ' ')
		{
			s3.replace(i, 1, "%20");
			i += 3;
		}
		else
		{
			i++;
		}
	}
	cout << s3 << endl;

	string s4("hello world hello bit");
	string s5;
	for (auto ch : s4)
	{
		if (ch == ' ')
		{
			s5 += "%20";
		}
		else
		{
			s5 += ch;
		}
	}

	cout << s5 << endl;
}

int main()
{
	test_string9();
	return 0;
}

//字符串中的第一个唯一字符
//class Solution {
//public:
//	int firstUniqChar(string s) {
//		//计算统计
//		int count[26] = { 0 };
//		for (auto ch : s)
//		{
//			count[ch - 'a']++;
//		}
//
//		for (size_t i = 0; i < s.size(); ++i)
//		{
//			if (count[s[i] - 'a'] == 1)
//			{
//				return i;
//			}
//		}
//		return -1;
//	}
//};
// 
// 
//验证回文串
class Solution {
public:
	bool IsLetterNumber(char ch)
	{
		return (ch >= 'a' && ch <= 'z')
			|| (ch >= 'A' && ch <= 'Z')
			|| (ch >= '0' && ch <= '9');
	}
	bool isPalindrome(string s) {
		for (auto& ch : s)
		{
			if (ch >= 'A' && ch <= 'Z')
			{
				ch += 32;
			}

		}

		int begin = 0;
		int end = s.size() - 1;
		while (begin < end)
		{

			while (begin < end && !IsLetterNumber(s[begin]))
			{
				begin++;
			}
			while (begin < end && !IsLetterNumber(s[end]))
			{
				end--;
			}

			if (s[begin] != s[end])
			{
				return false;
			}
			else {
				++begin;
				--end;
			}
		}
		return true;

	}

};

//字符串相加
class Solution {
public:
	string addStrings(string num1, string num2) {
		int end1 = num1.size() - 1;
		int end2 = num2.size() - 1;

		int next = 0;
		string str;
		//末尾依次相加
		while (end1 >= 0 || end2 >= 0)
		{
			//字符计算转数字计算
			int x1 = end1 >= 0 ? num1[end1--] - '0' : 0;
			int x2 = end2 >= 0 ? num2[end2--] - '0' : 0;
			int x = x1 + x2 + next;
			//处理进位
			next = x / 10;
			x = x % 10;

			//数字结果转为字符结果
			//尾插
			str += x + '0';

		}

		if (next == 1)
		{
			str += '1';
		}
		//逆置
		reverse(str.begin(), str.end());

		return str;

	}
};